﻿#ifndef CBasicBattery_H
#define CBasicBattery_H
/********************************************************************************
** @ Date:2024/04/13
** @ Author: HanJiaXin
** @ Description:自定义电池控件基类
** @ Version:1.0.0
** @ ClassName:
** @ Fun:
********************************************************************************/
#include <QWidget>
#include <QColor>

class CBasicBattery : public QWidget
{
	Q_OBJECT
public:
	// 枚举类型定义了电池状态
	enum BatteryStatus
	{
		Discharging, // 放电状态
		Charging,    // 充电状态
		Full         // 充满状态
	};

	// 构造函数，创建一个基础电池对象
	explicit CBasicBattery(QWidget *parent = nullptr);
	~CBasicBattery();
	// 设置电量百分比
	void setLevel(int level);
	// 获取电量百分比
	int level() const;

	// 设置电池状态
	void setStatus(BatteryStatus status);
	// 获取电池状态
	BatteryStatus status() const;

	// 设置电池边框颜色
	void setBorderColor(const QColor &color);
	// 获取电池边框颜色
	QColor borderColor() const;

	// 设置电池内部填充颜色
	void setPaddingColor(const QColor &color);
	// 获取电池内部填充颜色
	QColor paddingColor() const;

	// 设置充电指示器颜色
	void setChargeColor(const QColor &color);
	// 获取充电指示器颜色
	QColor chargeColor() const;

	// 设置低电量警告颜色
	void setLowBatteryColor(const QColor &color);
	// 获取低电量警告颜色
	QColor lowBatteryColor() const;

	// 设置绘制偏移量
	void setOffset(const QPoint &offset);
	// 获取绘制偏移量
	QPoint offset() const;

	// 设置电池外形是否为圆角
	void setRound(bool round);

	// 获取电池外形是否为圆角
	bool isRound() const;

	// 设置圆角占电池高度的百分比
	void setRoundPresent(int roundPresent);

	// 获取圆角占电池高度的百分比
	int roundPresent() const;

signals:

private:
	// 获取控件尺寸
	void getSize();

protected:
	virtual void paintEvent(QPaintEvent *event);
	virtual void resizeEvent(QResizeEvent *event);

	// 成员变量，保存电池的宽度、高度、电量百分比、状态以及颜色等信息
	int m_width;          // 电池宽度
	int m_height;         // 电池高度
	int m_level = 5;          // 电量百分比
	bool m_round = true; // 标志变量，表示电池外形是否为圆角
	int m_roundPresent = 5; // 圆角占电池高度的百分比，用于控制圆角的大小
	BatteryStatus m_status = Discharging;  // 电池状态
	QColor m_border = Qt::white;       // 电池边框颜色
	QColor m_padding = Qt::white;      // 电池内部填充颜色
	QColor m_charge = Qt::green;       // 充电指示器颜色
	QColor m_nobattery = Qt::red;    // 低电量警告颜色
	QPoint m_offset = QPoint(2, 2);       // 绘制偏移量，用于绘制电量指示器位置
};

#endif // BASICBATTERY_H


